﻿/*
   Copyright 2011 Softisis

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

namespace FOM.Interfaces
{
    /// <summary>
    /// Contract for converters.
    /// </summary>
    /// <remarks>Copyright Softisis 2011 (France)</remarks>
    public interface IConverter
    {
        /// <summary>
        /// Conversion method. 
        /// </summary>
        /// <param name="ctx">Conversion context</param>
        /// <returns>The destination object, after convertion. This can be "dst" itself in case of objects.
        /// But converter can create new instance if needed.</returns>
        object Convert(MappingContext ctx);

        ///<summary>
        /// New: for reverse capability of mapping. When called a reverse on a mapping, it will look for a reverse converter.
        ///</summary>
        ///<returns>The converter to use to reverse. If null, no converter will be used</returns>
        IConverter Reverse();
    }
}
